#ifndef _OBSERVATION_
#define _OBSERVATION_
#include<string>
#include<vector>
#include<iostream>
#include<io.h>
#include<cstring>
#include<stdint.h>
#include<Eigen/Eigen>
#include<pcl/point_cloud.h>
#include<pcl/point_types.h>

using namespace std;
typedef pcl::PointXYZ PointIoType;
#define SIZE_OF_LINES 1101

class Observation
{
public:
	
	Observation();
	~Observation();
	vector<string> obs_list;
	int executebin2pcd(char* source_list, const string PCD_OUTPUT_PATH);
	int observationDataInit(const string BIN_INPUT_PATH);
	pcl::PointCloud<PointIoType>::Ptr getFromBin(const size_t index, const string BIN_INPUT_PATH,bool cut = true);
	vector<string> listFiles(const char * dir);
	//vector<Eigen::Matrix4d> transform;
	void bin2pcd(const char*dir,const string filename,const string PCD_OUTPUT_PATH);
	void transfromMatrix_Reader(vector<Eigen::Matrix4d> &transform, const string POSE_DATA_PATH);
	void groundTruthReader(vector<Eigen::Matrix4d> &GT,const string POSE_DATA_PATH);
private:
	pcl::PointCloud<PointIoType>::Ptr cloud_data;
	float threshold = { 25.0 };
};

#endif

